package br.com.simon.controller;

import java.util.List;

import br.com.caelum.vraptor.Delete;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Put;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.view.Results;
import br.com.simon.dao.QuestaoDao;
import br.com.simon.modelo.Questao;
import br.com.simon.modelo.Restrito;
import br.com.simon.modelo.Usuario;

@Resource
public class QuestaoController {
	private final QuestaoDao questaoDao;
	private final Result result;
	private final Validator validator;

	public QuestaoController(QuestaoDao questaoDao, Result result,
			Validator validator) {
		this.questaoDao = questaoDao;
		this.result = result;
		this.validator = validator;
	}

	@Get("/questoes/lista")
	public void lista() {
		String mensagem = "teste";
		result.include("key", mensagem);
		result.include("questoesList", questaoDao.listaTudo());
	}

	@Restrito
	@Post("/questoes")
	public void adiciona(Questao questao) {
		validaFormulario(questao);
		questaoDao.salva(questao);
		result.redirectTo(this).lista();
	}

	@Restrito
	@Get("/questoes/novo")
	public void formulario() {
	}
	

	@Restrito
	@Get("/questoes/{id}")
	public Questao edita(int id) {
		return questaoDao.getQuestao(id);
	}

	@Restrito
	@Put("/questoes/{questao.id}")
	public void altera(Questao questao) {

		validaFormulario(questao);

		questaoDao.atualiza(questao);
		result.redirectTo(this).lista();
	}


	@Get("/questoes/busca.json")
	public void buscaJson(String q) {
		result.use(Results.json()).withoutRoot().from(questaoDao.busca(q))
				.exclude("id", "assunto").serialize();
	}

	@Get("/questoes/busca")
	public List<Questao> busca(String id) {
		result.include("id", id);
		return questaoDao.busca(id);
	}

	private void validaFormulario(Questao questao) {
		validator.validate(questao);
		validator.onErrorUsePageOf(this).formulario();
	}
	
	@Restrito
	@Delete("/questoes/{id}")
	public void remove(int id) {
		Questao questao = questaoDao.getQuestao(id);
		questaoDao.remove(questao);
		result.redirectTo(this).lista();
	}

	@Get("/questoes/remove")
	public void remove() {
		String mensagem = "teste";
		result.include("key", mensagem);
		result.include("questaoList", questaoDao.listaTudo());
	}
	@Get("/questoes/exibe/{id}")
	public Questao exibe(int id){
		return questaoDao.getQuestao(id);
	}
}




